/***************************************************************************
 *   fir_filter.frag - Fragment shader for simple FIR filter GPU routine   *
 *   Copyright (C) 2009 by cmaster.matso                                   *
 *   cmaster.matso@gmail.com                                               *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#define NUM_SAMPLES 4

#extension GL_ARB_texture_rectangle : enable

uniform sampler2DRect tex;
uniform float signal_fragment_length;
uniform vec4 filter_params;

void main(void)
{
    vec2 texCoord = gl_TexCoord[0].st;
    vec2 t;
    float output = 0.0;
    float aux = 0.0;
    int i;

    for (i = NUM_SAMPLES - 1; i >= 0; i--) {
        t = vec2((texCoord.s - float(i)), texCoord.t);
        if (t.s < signal_fragment_length) aux = texture2DRect(tex, t).r;
        else aux = 0.0;
        output += filter_params[i] * aux;
    }

    gl_FragColor = vec4(output, 0.0, 0.0, 0.0);
}
